package stack;

import java.util.Stack;

/**
 * 题目：求有效的括号序列
 * y:（）[]{} 有效的
 *  ([)]无效的
 *  [()]有效的
 * @Author Gavin
 * @date 2021.12.29 21:51
 */
public class stack_2 {
    /**
     * 解题思路：使用一个栈来处理
     * 遇到（[{的时候就push到栈里面
     * 当遇到）]}的时候就分别pop栈里面的元素进行对比
     * 最后返回栈是否为空
     */
    public static boolean solution(String s) {
        if (s == null || s.length() == 0) return false;
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            if(!"(){}[]".contains(String.valueOf(s.charAt(i)))){
                continue;
            }
            if (s.charAt(i) == '(') {
                stack.push(')');
            }
            else if (s.charAt(i) == '[') {
                stack.push(']');
            }
            else if (s.charAt(i) == '{') {
                stack.push('}');
            }
            else if(stack.isEmpty()||s.charAt(i)!=stack.pop())return false;
        }
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        System.out.println(solution("a(])"));
    }
}

